package aliyun

import (
	alidns "github.com/alibabacloud-go/alidns-20150109/v4/client"
	openapiutil "github.com/alibabacloud-go/darabonba-openapi/v2/utils"
	credential "github.com/aliyun/credentials-go/credentials"
)

// AliyunDnsConfig 阿里云DNS配置结构体，用于管理DNS服务的认证和连接信息
type AliyunDnsConfig struct {
	AliyunConfig
}

var _ AliyunClientInter[*alidns.Client] = (*AliyunDnsConfig)(nil)

// NewAliyunDnsConfig 创建一个新的阿里云DNS配置实例
// 参数:
//   ak: 阿里云访问密钥ID
//   sk: 阿里云访问密钥Secret
//   ep: 阿里云服务端点地址
// 返回值:
//   *AliyunDnsConfig: 返回初始化后的阿里云DNS配置实例
func NewAliyunDnsConfig(ak, sk, ep string) *AliyunDnsConfig {
	return &AliyunDnsConfig{
		AliyunConfig: AliyunConfig{
			AccessKeyId:     ak,
			AccessKeySecret: sk,
			Endpoint:        ep,
		},
	}
}

// CreateClient 创建阿里云DNS客户端实例
// 该函数使用配置信息初始化阿里云DNS服务客户端，支持凭据认证方式
// 返回值:
//   _result: 阿里云DNS客户端实例
//   _err: 创建过程中可能发生的错误
func (a *AliyunDnsConfig) CreateClient() (_result *alidns.Client, _err error) {
	// 工程代码建议使用更安全的无AK方式，凭据配置方式请参见：https://help.aliyun.com/document_detail/378661.html。
	credential, _err := credential.NewCredential(nil)
	if _err != nil {
		return _result, _err
	}

	config := &openapiutil.Config{
		AccessKeyId:     &a.AccessKeyId,
		AccessKeySecret: &a.AccessKeySecret,
		Credential:      credential,
		Endpoint:        &a.Endpoint,
	}

	_result, _err = alidns.NewClient(config)
	return _result, _err
}
